package net.melon.sysres.manager;

import java.util.List;

import net.esj.basic.pojo.op.Operator;
import net.esj.basic.utils.Pagination;
import net.melon.sysres.pojo.Resource;

/**
 * 
 * @author HaoJB
 *
 */
public interface ResourceManager {

	/**
	 * 
	 * @param resource
	 * @param codeGenerate 是否根据父类生成keyCode(当需要生成keyCode时该节点最多存在255个对象,一般在用户级调用时不要生成)
	 * @param operator
	 * @return
	 */
	Resource saveResource(Resource resource,boolean codeGenerate,Operator operator);
	
	Resource updateResource(Resource resource,Operator operator);
	
	List<Resource> loadResources(Resource parent);
	
	List<Resource> loadResourcesByType(Resource parent,String type);
	
	List<Resource> loadAllResources();
	
	/**
	 * 获得第一层的节点，一般用作枚举属性中
	 * @param type
	 * @return
	 */
	List<Resource> loadFirstNodeResourcesByType(String type);
	
	/**
	 * 根据类型和父类code获得列表，一般用在多层树中
	 * @param type
	 * @param parentCode <0不表示
	 * @return
	 */
	List<Resource> loadResourcesByType(String type,int parentCode,boolean fetchParent);

	/**
	 * 获得该类型下的第一个节点
	 * @param type
	 * @param parentCode
	 * @return
	 */
	Resource findFirstResourceByType(String type,int code);
	
	Resource getResource(String id);
	
	/**
	 * 获得某个父类下的第一层子类,一般用在单层的枚举中
	 * @param parent
	 * @param pagination
	 * @return
	 */
	Pagination<Resource> pageResources(Pagination<Resource> pagination);
	
	Resource findResourceByTypeAndValue(String type,String value);
	
	Resource findResourceByTypeAndName(String type,String name);
	
}
